//package com.per.mybootall.mqtt.yc;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
//import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
//import org.eclipse.paho.client.mqttv3.MqttMessage;
//
//import java.util.regex.Pattern;
//
///**
// * 发布消息的回调类
// *
// * 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
// * 每个客户机标识都需要一个回调实例。在此示例中，构造函数传递客户机标识以另存为实例数据。
// * 在回调中，将它用来标识已经启动了该回调的哪个实例。
// * 必须在回调类中实现三个方法
// *
// * @author yc
// */
//@Slf4j
//public class PushCallback implements MqttCallbackExtended {
//    //系统主题：客户端连接通知 正则匹配
//    static String connectionPattern = "^\\$SYS/brokers/.*(/clients/).*/connected$";
//    //系统主题：客户端断连通知 正则匹配
//    static String disconnectedPattern = "^\\$SYS/brokers/.*(/clients/).*/disconnected$";
//
//    /**
//     * mqtt断开连接自动重连后的回调方法
//     * @param b
//     * @param s
//     */
//    @Override
//    public void connectComplete(boolean b, String s) {
//
//        log.info("mqtt断开重连成功");
//    }
//
//    /**
//     * mqtt在断开连接时的回调方法
//     * @param cause
//     */
//    @Override
//    public void connectionLost(Throwable cause) {
//
//        log.info("mqtt连接断开");
//    }
//
//    /**
//     * 这个是消息发送成功的回调方法
//     * @param token
//     */
//    @Override
//    public void deliveryComplete(IMqttDeliveryToken token) {
//
//
////        log.info("消息推送 成功到达!" + token.isComplete());
//    }
//
//    /**
//     * 这个是订阅消息到达时触发
//     * @param topic
//     * @param message
//     * @throws Exception
//     */
//    @Override
//    public void messageArrived(String topic, MqttMessage message) throws Exception {
//        // subscribe后得到的消息会执行到这里面
////        log.info("接收消息主题 : " + topic);
////        log.info("接收消息Qos : " + message.getQos());
////        log.info("接收消息内容 : " + new String(message.getPayload()));
//
//        //收到的消息内容
//        JSONObject msgData = JSON.parseObject(new String(message.getPayload()));
//
//        //当有客户端连接
//        if (Pattern.matches(connectionPattern, topic)){
//            log.info("上线："+ msgData.get("clientid"));
//        }
//
//        //当有客户端断开连接
//        else if (Pattern.matches(disconnectedPattern, topic)){
//            log.info("下线："+ msgData.get("clientid"));
//        }
//    }
//
//}